Platformer Collision Error [closed]

Posted by Connor on Game Development See other posts from Game Development or by Connor
Published on 2012-10-12T18:12:55Z Indexed on 2012/10/12 21:49 UTC
Read the original article Hit count: 222

I am currently working on a relatively simple platform game that has an odd bug.
You start the game by falling onto the ground (you spawn a few blocks above the ground), but when you land your feet get stuck INSIDE the world and you can't move until you jump.
Here's what I mean:

http://i.imgur.com/IKLZY.png

The player's feet are a few pixels below the ground level. However, this problem only occurs in 3 places throughout the map and only in those 3 select places. I'm assuming that the problem lies within my collision detection code but I'm not entirely sure, as I don't get an error when it happens.

public boolean isCollidingWithBlock(Point pt1, Point pt2) { 
//Checks x  
    for(int x = (int) (this.x / Tile.tileSize); x < (int) (this.x / Tile.tileSize + 4); x++) {
//Checks y
    for(int y = (int) (this.y / Tile.tileSize); y < (int) (this.y / Tile.tileSize + 4); y++) {
        if(x >= 0 && y >= 0 && x < Component.dungeon.block.length && y < Component.dungeon.block[0].length) {
//If the block is not air
            if(Component.dungeon.block[x][y].id != Tile.air) {
                //If the player is in contact with point one or two on the block 
                if(Component.dungeon.block[x][y].contains(pt1) || Component.dungeon.block[x][y].contains(pt2)) {
//Checks for specific blocks 
                    if(Component.dungeon.block[x][y].id == Tile.portalBlock) {
                        Component.isLevelDone = true;
                    } 
                    if(Component.dungeon.block[x][y].id == Tile.spike) {
                        Health.health -= 1;
                        Component.isJumping = true;

                        if(Health.health == 0) {
                            Component.isDead = true;
                        }
                    }
                    return true;
                }
            } 
        }
    }
}

return false;
}

What I'm asking is how I would fix the problem. I've looked over my code for quite a while and I'm not sure what's wrong with it. Also, if there's a more efficient way to do my collision checking then please let me know!

I hope that is enough information, if it's not just tell me what you need and I'll be sure to add it.

Thank you!

[EDIT] Jump code:

if(!isJumping && !isCollidingWithBlock(new Point((int) x + 2, (int) (y + height)), new Point((int) (x + width + 2), (int) (y + height)))) {
        y += fallSpeed;
//sY is the screen's Y.  The game is a side-scroller
        Component.sY += fallSpeed;
    } else {
        if(Component.isJumping) {
            isJumping = true;
        }
    }

if(isJumping) {
        if(!isCollidingWithBlock(new Point((int) x + 2, (int) y), new Point((int) (x + width + 2), (int) y))) {
            if(jumpCount >= jumpHeight) {
                isJumping = false;
                jumpCount = 0;
            } else {
                y -= jumpSpeed;
                Component.sY -= jumpSpeed;

                jumpCount += 1;
            }
        } else {
            isJumping = false;
            jumpCount = 0;
        }
    }

© Game Development or respective owner

Related posts about java

Related posts about collision-detection